/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package Model.dao;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;

import Model.pojo.Cliente;
import Model.pojo.Fornecedor;

public class FornecedorDao implements InterfaceFornecedorDao {
	
	private File arquivo = new File("ListaFornecedor.txt");
	ArrayList<Fornecedor> lista = new ArrayList<Fornecedor>();
	private String nome;
	private long codigo;
	private String endereco;
	private String telefone;
	private Fornecedor fornecedor;
	
	private FileWriter fw;
	private BufferedWriter bw;
	private FileReader fr;
	private BufferedReader br;
	Iterator<Fornecedor> it;
	
		//Le todos os Itens que estao no arquivo e coloca em uma lista.
		public ArrayList<Fornecedor> ler() throws IOException{
			if(arquivo.exists() == false){
				arquivo.createNewFile();
				return lista;
			}
			fr = new FileReader (arquivo);
			br = new BufferedReader (fr);
			while (br.ready()){
				nome = br.readLine();
				codigo = Long.parseLong(br.readLine());
				endereco = br.readLine();
				telefone = br.readLine();
				inserir(nome, codigo, endereco, telefone);
			}
			br.close();
			fr.close();
			return lista;
		}
		
		//verfica por nome na lista de fornecedores
		public Fornecedor verificar (String nome){
			if (lista.isEmpty() == true) return null;
			it = lista.iterator();
			while (it.hasNext()) {  
				Fornecedor aux = it.next();  
			    if (aux.getNome().equals(nome)){  
			        return aux;
			   }  
			}
			return null;
		}
		
		//verfica por código na lista de fornecedores
		public Fornecedor verificar (long codigo){
			if (lista.isEmpty() == true) return null;
			it = lista.iterator();
			while (it.hasNext()) {  
				Fornecedor aux = it.next();  
			    if (aux.getCodigo() == codigo){  
			        return aux;
			   }  
			}
			return null;
		}
		
		public void inserir (String nome, long codigo, String endereco, String telefone){
			fornecedor = new Fornecedor(nome,codigo,endereco,telefone);
			lista.add(fornecedor);
		}
	
		//Salva um Fornecedor no arquivo ListaFornecedor.
		public boolean salvar(Fornecedor fornecedor) throws IOException{
			if (fornecedor == null) return false;
			fw = new FileWriter(arquivo, true);
			bw = new BufferedWriter (fw);
			bw.write(fornecedor.getNome());
			bw.newLine();
			bw.write(""+fornecedor.getCodigo());
			bw.newLine();
			bw.write(fornecedor.getEndereco());
			bw.newLine();
			bw.write(fornecedor.getTelefone());
			bw.newLine();
			bw.close();
			fw.close();
			return true;
		}
		
		//Salva uma lista de Fornecedores no arquivo ListaFornecedores (Exclui todos os outros Fornecedores que estavam no arquivo).
		public boolean salvar(ArrayList<Fornecedor> lista) throws IOException{
			if (lista.isEmpty() == true) return false;
			fw = new FileWriter(arquivo);
			it = lista.iterator();
			while (it.hasNext()){
				salvar(it.next());
			}
			return true;
		}
		
		//Exclui um fornecedor do vetor de fornecedor. 
		public ArrayList<Fornecedor> excluir(long codigo) {
			if (fornecedor == null || lista.isEmpty() == true){
				return lista;
			}
			it = lista.iterator();
			if (lista.get(0).getCodigo()== codigo){
				lista.remove(0);
			}
			else{
				while (it.hasNext()){
					if (it.next().getCodigo()== codigo){
						it.remove();
						break;
					}
				}
			}
			return lista;	
		}

		public ArrayList<Fornecedor> getLista() {
			return lista;
		}

		public long gerarCodigo (){
			if (lista.isEmpty() == true) return 1;
			return (lista.get(lista.size()-1).getCodigo())+1;
		}
		
}
